#ifndef __LUACAPI_H__
#define __LUACAPI_H__


int  GetStackTop();
void StackPop(int n);
bool RawEqual(int i1,int i2);
void RawGet(int index);
void RawGetI(int index,int m);
void PushValue(int index);
void Replace(int index);
int Ref(int tableindex);
void UnRef(int tableindex,int refindex);
void GetGlobal(const char* fieldname);

bool IsNil(int index);
void PushNil();

bool IsBool(int index);
bool ToBool(int index);
void PushBool(bool b);

bool IsNumber(int index);
double ToNumber(int index);
void PushNumber(double number);

bool IsString(int index);
const char* ToString(int index);
const char* PushString(const char* str);

bool IsCFunction(int index);
lua_CFunction ToCFunction(int index);
void PushCFunction(lua_CFunction str);

bool IsTable(int index);
void GetTable(int index);

bool NewMetatable(const char* tname);
bool GetMetatable(int index);

bool IterNext(int index);

bool IsUserData(int index);
template<class T> T* GetUserData(int index)
{
	return (T*)lua_touserdata(mLuaState,index);
}

template<class T> void PushUserData(T &t)
{
	void* p = lua_newuserdata(mLuaState,sizeof(T));
	memset(p,&t,sizeof(T));
}

template<class T> void PushUserData(T *t)
{
	void* p = lua_newuserdata(mLuaState,sizeof(T));
	memset(p,t,sizeof(T));
}

#endif


